package com.hui.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.hui.dao.MusicWebMapper;
import com.hui.domain.Song;
import com.hui.domain.Upload;
import com.hui.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @author Ayingzz
 * @create 2021/12/25 16:36
 */

public interface MusicWebService {

    /**
     * 查询所有歌曲
     * @return
     */
    List<Song> queryAllSongs();

    /**
     * 根据类型查询歌曲
     * @return
     */
    List<Song> querySongByType(String type);

    /**
     * 根据用户名查询歌曲（我的喜欢）
     * @param uname
     * @return
     */
    List<Song> querySongByUname(String uname);

    /**
     * 根据关键字查询歌曲
     * @param keyword
     * @return
     */
    List<Song> querySongByKeyword(String keyword);

    /**
     * 收藏歌曲或取消收藏（我的喜欢）
     * @param uname
     * @return
     */
    int addOrDeleteSongFromFavouriteListByUname(String uname, String mid);

    /**
     * 根据歌曲id增加播放次数
     * @param mid
     * @return
     */
    List<Song> addPlayTimesByMid(String mid);

    /**
     * 查询所有歌曲类型
     * @return
     */
    Set<String> queryAllTypes();

    /**
     * 添加歌曲
     * @param song
     * @param upload
     * @return
     */
    int insertSong(String song, Upload upload) throws IOException;

    /**
     * 根据歌曲id查询歌曲
     * @param mid
     * @return
     */
    Song querySongByMid(String mid);

    /**
     * 根据歌曲id编辑歌曲
     * @param songStr
     * @return
     */
    int updateSongByMid(String songStr) throws JsonProcessingException;

    /**
     * 根据id删除歌曲
     * @param mid
     * @return
     */
    int deleteSongByMid(String mid);

    /**
     * 增加一个用户
     * @param userStr
     * @return
     */
    User insertUser(String userStr) throws JsonProcessingException;

    /**
     * 匹配用户（登录）
     * @param uname
     * @param upass
     * @return
     */
    String checkUserByUname(String uname, String upass);
}
